<!doctype html><html lang dir=ltr><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>11.1 ~ 11.6 | 汇编语言 | Hui.Ke - Blog</title><meta name=generator content="Hugo Eureka 0.9.3"><link rel=stylesheet href=https://b.hui.ke/css/eureka.min.9cec6350e37e534b0338fa9a085bf06855de3b0f2dcf857e792e5e97b07ea905d4d5513db554cbc26a9c3da622bae92d.css><script defer src=https://b.hui.ke/js/eureka.min.fa9a6bf6d7a50bb635b4cca7d2ba5cf3dfb095ae3798773f1328f7950028b48c17d06276594e1b5f244a25a6c969a705.js></script>
<link rel=preconnect href=https://fonts.googleapis.com><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=preload href="https://fonts.googleapis.com/css2?family=Lora:wght@400;600;700&family=Noto+Serif+SC:wght@400;600;700&display=swap" as=style onload='this.onload=null,this.rel="stylesheet"'><link rel=stylesheet href=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/styles/vs.min.css media=print onload='this.media="all",this.onload=null' crossorigin><script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/highlight.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/bash.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/ini.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/json.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/php.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/python.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/shell.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/sql.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/x86asm.min.js crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.4.0/build/languages/xml.min.js crossorigin></script>
<link rel=stylesheet href=https://b.hui.ke/css/highlightjs.min.2958991528e43eb6fc9b8c4f2b8e052f79c4010718e1d1e888a777620e9ee63021c2c57ec7417a3108019bb8c41943e6.css media=print onload='this.media="all",this.onload=null'><script defer type=text/javascript src=https://lib.baomitu.com/font-awesome/6.1.1/js/all.min.js></script>
<link rel=stylesheet href=https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css integrity=sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ media=print onload='this.media="all",this.onload=null' crossorigin><script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.js integrity=sha384-VQ8d8WVFw0yHhCk5E8I86oOhv48xLpnDZx5T9GogA/Y84DcCKWXDmSDfn13bzFZY crossorigin></script>
<script defer src=https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/contrib/auto-render.min.js integrity=sha384-+XBljXPPiv+OzfbB3cVmLHf4hdUFHlWNZN5spNQ7rmHTXpd7WvJum6fIACpNNfIR crossorigin></script>
<script>document.addEventListener("DOMContentLoaded",function(){renderMathInElement(document.body,{delimiters:[{left:"$$",right:"$$",display:!0},{left:"$",right:"$",display:!1},{left:"\\(",right:"\\)",display:!1},{left:"\\[",right:"\\]",display:!0}]})})</script><script defer src=https://cdn.jsdelivr.net/npm/mermaid@8.14.0/dist/mermaid.min.js integrity=sha384-atOyb0FxAgN9LyAc6PEf9BjgwLISyansgdH8/VXQH8p2o5vfrRgmGIJ2Sg22L0A0 crossorigin></script>
<link rel=icon type=image/png sizes=32x32 href=https://b.hui.ke/icon_hub7ca0b5404c6d576559b2bd22c64b0e5_2009_32x32_fill_box_center_3.png><link rel=apple-touch-icon sizes=180x180 href=https://b.hui.ke/icon_hub7ca0b5404c6d576559b2bd22c64b0e5_2009_180x180_fill_box_center_3.png><meta name=description content="  《汇编语言（第3版）》11.1 ~ 11.6、《零基础入门学习汇编语言》P54 ~ 55"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Docs","item":"https://b.hui.ke/docs/"},{"@type":"ListItem","position":2,"name":"汇编语言","item":"https://b.hui.ke/docs/assembly-language/"},{"@type":"ListItem","position":3,"name":"11.1 ~ 11.6","item":"https://b.hui.ke/docs/assembly-language/16/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"Article","mainEntityOfPage":{"@type":"WebPage","@id":"https://b.hui.ke/docs/assembly-language/16/"},"headline":"11.1 ~ 11.6 | 汇编语言 | Hui.Ke - Blog","datePublished":"2020-11-10T19:17:38+08:00","dateModified":"2020-11-10T19:17:38+08:00","wordCount":2862,"author":{"@type":"Person","name":"Hui.Ke"},"publisher":{"@type":"Person","name":"Hui.Ke","logo":{"@type":"ImageObject","url":"https://b.hui.ke/icon.png"}},"description":"\u003cp\u003e  《汇编语言（第3版）》11.1 ~ 11.6、《零基础入门学习汇编语言》P54 ~ 55\u003c\/p\u003e"}</script><meta property="og:title" content="11.1 ~ 11.6 | 汇编语言 | Hui.Ke - Blog"><meta property="og:type" content="article"><meta property="og:image" content="https://b.hui.ke/icon.png"><meta property="og:url" content="https://b.hui.ke/docs/assembly-language/16/"><meta property="og:description" content="  《汇编语言（第3版）》11.1 ~ 11.6、《零基础入门学习汇编语言》P54 ~ 55"><meta property="og:site_name" content="Hui.Ke - Blog"><meta property="article:published_time" content="2020-11-10T19:17:38+08:00"><meta property="article:modified_time" content="2020-11-10T19:17:38+08:00"><meta property="article:section" content="docs"><meta property="article:tag" content="标志寄存器"><meta property="article:tag" content="flag"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/18/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/17/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/15/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/14/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/13/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/12/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/11/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/10/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/9/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/8/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/7/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/6/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/5/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/4/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/3/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/2/"><meta property="og:see_also" content="https://b.hui.ke/docs/assembly-language/1/"><script>!function(e){"use strict";!function(){var i,s=window,o=document,a=e,c="".concat("https:"===o.location.protocol?"https://":"http://","sdk.51.la/js-sdk-pro.min.js"),n=o.createElement("script"),r=o.getElementsByTagName("script")[0];n.type="text/javascript",n.setAttribute("charset","UTF-8"),n.async=!0,n.src=c,n.id="LA_COLLECT",a.d=n,i=function(){s.LA.ids.push(a)},s.LA?s.LA.ids&&i():(s.LA=e,s.LA.ids=[],i()),r.parentNode.insertBefore(n,r)}()}({id:"Jgb8aUbG5e3rqhrs",ck:"Jgb8aUbG5e3rqhrs",autoTrack:!0,hashMode:!0})</script><body class="flex min-h-screen flex-col"><header class="min-h-16 pl-scrollbar bg-secondary-bg fixed z-50 flex w-full items-center shadow-sm"><div class="mx-auto w-full max-w-screen-xl"><script>let storageColorScheme=localStorage.getItem("lightDarkMode");((storageColorScheme=="Auto"||storageColorScheme==null)&&window.matchMedia("(prefers-color-scheme: dark)").matches||storageColorScheme=="Dark")&&document.getElementsByTagName("html")[0].classList.add("dark")</script><nav class="flex items-center justify-between flex-wrap px-4 py-4 md:py-0"><a href=/ class="me-6 text-primary-text text-xl font-bold">Hui.Ke - Blog</a>
<button id=navbar-btn class="md:hidden flex items-center px-3 py-2" aria-label="Open Navbar">
<i class="fas fa-bars"></i></button><div id=target class="hidden block md:flex md:grow md:justify-between md:items-center w-full md:w-auto text-primary-text z-20"><div class="md:flex md:h-16 text-sm md:grow pb-4 md:pb-0 border-b md:border-b-0"><a href=/posts/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Posts</a>
<a href=/docs/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 selected-menu-item me-4">Docs</a>
<a href=/categories/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Categories</a>
<a href=/series/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Series</a>
<a href=/tags/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Tags</a>
<a href=/love/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">Love</a>
<a href=/about/ class="block mt-4 md:inline-block md:mt-0 md:h-(16-4px) md:leading-(16-4px) box-border md:border-t-2 md:border-b-2 border-transparent me-4">About</a></div><div class=flex><div class="relative pt-4 md:pt-0"><div class="cursor-pointer hover:text-eureka" id=lightDarkMode><i class="fas fa-adjust"></i></div><div class="fixed hidden inset-0 opacity-0 h-full w-full cursor-default z-30" id=is-open></div><div class="absolute flex flex-col start-0 md:start-auto end-auto md:end-0 hidden bg-secondary-bg w-48 rounded py-2 border border-tertiary-bg cursor-pointer z-40" id=lightDarkOptions><span class="px-4 py-1 hover:text-eureka" name=Light>Light</span>
<span class="px-4 py-1 hover:text-eureka" name=Dark>Dark</span>
<span class="px-4 py-1 hover:text-eureka" name=Auto>Auto</span></div></div></div></div><div class="fixed hidden inset-0 opacity-0 h-full w-full cursor-default z-0" id=is-open-mobile></div></nav><script>let element=document.getElementById("lightDarkMode");storageColorScheme==null||storageColorScheme=="Auto"?document.addEventListener("DOMContentLoaded",()=>{window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",switchDarkMode)}):storageColorScheme=="Light"?(element.firstElementChild.classList.remove("fa-adjust"),element.firstElementChild.setAttribute("data-icon","sun"),element.firstElementChild.classList.add("fa-sun")):storageColorScheme=="Dark"&&(element.firstElementChild.classList.remove("fa-adjust"),element.firstElementChild.setAttribute("data-icon","moon"),element.firstElementChild.classList.add("fa-moon")),document.addEventListener("DOMContentLoaded",()=>{getcolorscheme(),switchBurger()})</script></div></header><main class="grow pt-16"><div class=pl-scrollbar><div class="mx-auto w-full max-w-screen-xl lg:px-4 xl:px-8"><div class=lg:pt-12><div class="flex flex-col md:flex-row bg-secondary-bg rounded"><div class="md:w-1/4 lg:w-1/5 border-e"><div class="sticky top-16 pt-6"><div id=sidebar-title class="md:hidden mx-4 px-2 pt-4 pb-2 md:border-b text-tertiary-text md:text-primary-text"><span class=font-semibold>Table of Contents</span>
<i class='fas fa-caret-right ms-1'></i></div><div id=sidebar-toc class="hidden md:block overflow-y-auto mx-6 md:mx-0 pe-6 pt-2 md:max-h-doc-sidebar bg-primary-bg md:bg-transparent"><div class="flex flex-wrap ms-4 -me-2 p-2 bg-secondary-bg md:bg-primary-bg rounded"><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/>汇编语言</a></div><ul class=ps-6><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/18/>11.9 ~ 11.11</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/17/>11.7 ~ 11.9</a></div></li><li class=py-2><div><a class="text-eureka hover:text-eureka" href=https://b.hui.ke/docs/assembly-language/16/>11.1 ~ 11.6</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/15/>10.8 ~ 10.12</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/14/>10.1 ~ 10.7</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/13/>9.7 ~ 9.9</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/12/>9.1 ~ 9.6</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/11/>8.5 ~ 8.9</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/10/>8.1</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/9/>7.1 ~ 7.10</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/8/>6.1 ~ 6.3</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/7/>5.1 ~ 5.4</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/6/>4.1 ~ 4.9</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/5/>3.6 ~ 3.10</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/4/>3.1 ~ 3.5</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/3/>2.8 ~ 2.12</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/2/>1.11 ~ 2.6</a></div></li><li class=py-2><div><a class=hover:text-eureka href=https://b.hui.ke/docs/assembly-language/1/>1.1 ~ 1.10</a></div></li></ul></div></div></div><div class="w-full md:w-3/4 lg:w-4/5 pb-8 pt-2 md:pt-8"><div class=flex><div class="w-full lg:w-3/4 px-6"><article class=prose><h1 class=mb-4>11.1 ~ 11.6</h1><div class="text-tertiary-text not-prose mt-2 flex flex-row flex-wrap items-center"><div class="me-6 my-2"><i class="fas fa-calendar me-1"></i>
<span>2020-11-10</span></div><div class="me-6 my-2"><i class="fa-solid fa-pen-to-square me-1"></i>
<span>2020-11-10</span></div><div class="me-6 my-2"><i class="fas fa-clock me-1"></i>
<span>6 min read</span></div><div class="me-6 my-2"><i class="fas fa-folder me-1"></i>
<a href=https://b.hui.ke/categories/it/ class=hover:text-eureka>IT</a></div><div class="me-6 my-2"><i class="fas fa-th-list me-1"></i>
<a href=https://b.hui.ke/series/x86asm-language/ class=hover:text-eureka>x86asm Language</a></div><div class="me-6 my-2"><i class="fa-solid fa-eye me-1"></i>
<span id=busuanzi_value_page_pv><i class="fa fa-spinner fa-spin"></i></span> Hits</div></div><p>  《汇编语言（第3版）》11.1 ~ 11.6、《零基础入门学习汇编语言》P54 ~ 55</p><h2 id=第十一章-标志寄存器>第十一章 标志寄存器</h2><p>  8086 CPU 的标志寄存器有 16 位，其中存储的信息通常被称为程序状态字（PSW）。</p><p>  我们已经使用过 8086 CPU 的 ax、bx、cx、dx、si、di、bp、sp、ip、cs、ss、ds、es 等 13 个寄存器了。</p><p>  本章中的标志寄存器（以下简称为 flag）是我们要学习的最后一个寄存器。</p><p>  flag 和其他寄存器不一样，其他寄存器是用来存放数据的，都是整个寄存器具有一个含义。</p><p>  而 flag 寄存器是按位起作用的，也就是说，它的每一位都有专门的含义，记录特定的信息。</p><p>  flag 的 1、3、5、12、13、14、15 位在 8086 CPU 中没有使用，不具有任何含义。而 0、2、4、6、7、8、9、10、11 位都具有特殊的含义。</p><h3 id=111-zf-标志>11.1 ZF 标志</h3><p>flag 的第 6 位是 ZF，零标志位。它记录相关指令执行后</p><ol><li>结果为 0，ZF=1</li><li>结果不为 0，ZF=0</li></ol><p>  例如</p><pre><code class=language-x86asm>mov ax,1
sub ax,1
指令执行后，结果为 0，则 ZF=1

mov ax,2
sub ax,1
指令执行后，结果为 1，则 ZF=0
</code></pre><p>  对于 ZF 的值，我们可以这样来看，ZF 标记相关指令的计算结果是否为 0，如果为 0，则在 ZF 要记录下“是 0”这样的肯定信息。</p><pre><code class=language-x86asm>mov ax,1
and ax,0
执行后，结果为 0，则 ZF=1，表示“结果是 0”

mov ax,1
or ax,0
执行后，结果不为 0，则 ZF=0，表示“结果非 0”
</code></pre><blockquote><p>在 8086 CPU 的指令集中，有的指令的执行是影响标志寄存器的，比如：add、sub、mul、div、inc、or、and 等，它们大都是运算指令（进行逻辑或算术运算）；
有的指令的执行对标志寄存器没有影响，比如：mov、push、pop 等，它们大都是传送指令。</p></blockquote><p>  我们在使用一条指令的时候，要注意这条指令的全部功能，其中包括，执行结果对标记寄存器的哪些标志位造成影响。</p><h3 id=112-pf-标志>11.2 PF 标志</h3><p>flag 的第 2 位是 PF，奇偶标志位。它记录指令执行后，结果的所有二进制中 1 的个数</p><ol><li>为偶数，PF=1</li><li>为奇数，PF=0</li></ol><p>  示例</p><pre><code class=language-x86asm>mov al,1
add al,10
执行后，结果为 00001011B，其中有 3（奇数）个 1，则 PF=0

mov al,1
or al,10
执行后，结果为 00000011B，其中有 2（偶数）个 1，则 PF=1
</code></pre><h3 id=有符号数与补码>有符号数与补码</h3><p>  我们知道计算机中通常用补码来表示有符号数据。计算机中的一个数据可以看作是有符号数，也可以看成是无符号数。</p><p>  比如</p><ol><li>00000001B，可以看作为无符号数 1，或有符号数 +1</li><li>10000001B，可以看作为无符号数 129，也可以看作有符号数 -127</li></ol><p>  这也就是说，对于同一个二进制数据，计算机可以将它当作无符号数据来运算，也可以当作有符号数据来运算。</p><h3 id=113-sf-标志>11.3 SF 标志</h3><p>flag 的第 7 位是 SF，符号标志位。它记录指令执行后</p><ol><li>结果为负，SF=1</li><li>结果为正，SF=0</li></ol><p>  示例</p><pre><code class=language-x86asm>mov al,10000001B
add al,1
结果：(al)=10000010B
</code></pre><p>  我们可以将 add 指令进行的运算当作无符号数的运算，那么 add 指令相当于计算 129+1，结果为 130（10000010B）；</p><p>  也可以将 add 指令进行的运算当作有符号数的运算，那么 add 指令相当于计算 -127+1，结果为 -126（10000010B）。</p><p>  不管我们如何看待，CPU 在执行 add 等指令的时候，就已经包含了两种含义，也将得到用同一种信息来记录的两种结果。</p><p>  关键在于我们的程序需要哪一种结果。</p><p>  SF 标志，就是 CPU 对有符号数运算结果的一种记录，它记录数据的正负。</p><p>  在我们将数据当作有符号数来运算的时候，可以通过它来得知结果的正负。</p><p>  如果我们将数据当作无符号数来运算，SF 的值则没有意义，虽然相关的指令影响了它的值。</p><p>  这也就是说，CPU 在执行 add 等指令时，是必须然要影响到 SF 标志位的值的。</p><p>  至于我们需不需要这种影响，那就看我们如何看待指令所进行的运算了。</p><pre><code class=language-x86asm>mov al,10000001B
add al,1
执行后，结果为 10000010B，SF=1
表示：如果指令进行的是有符号数运算，那么结果为负

mov al,10000001B
add al,01111111B
执行后，结果为 0，SF=0
表示：如果指令进行的是有符号数运算，那么结果为非负。
</code></pre><p>  某些指令将影响标志寄存器中的多个标志位。这些被影响的标记为比较全面地记录了指令的执行结果，为相关的处理提供了所需的依据。</p><p>  比如指令 sub al,al 执行后，ZF、PF、SF 等标志位都要受到影响，它们分别为：1、1、0。</p><h3 id=114-cf-标志>11.4 CF 标志</h3><p>  flag 的第 0 位是 CF，进位标志位。</p><p>  一边情况下，在进行无符号数运算的时候，它记录了运算结果的最高有效位向更高位的进位值，或从更高位的错位值。</p><p>  对于位数为 N 的无符号数来说，其对应的二进制信息的最高位，即第 N-1 位的最高有效位，而假想存在的第 N 位，就是相对于最高有效位的更高位。</p><p>  我们知道，当两个数据相加的时候，有可能产生从最高有效位向更高位的进行。</p><p>  比如，两个 8 位数据：98H+98H，将产生进位。由于这个进位值在 8 位数中无法保存，我们在前面的课程中，就只是简单地说这个进位值丢失了。</p><p>  其实 CPU 在运算的时候，并不丢弃这个进位值，而是记录在一个特殊的寄存器的某一位上。</p><p>  8086 CPU 就用 flag 的 CF 位来记录这个进位值。</p><p>  另外一种情况，而当两个数据做减法的时候，有可能向更高位借位。</p><p>  比如，两个 8 位数据：91H-98H，将产生借位，借位后，相当于计算 197H-98H。</p><p>  而 flag 的 CF 位也可以用来记录这个借位值。</p><h3 id=115-of-标志>11.5 OF 标志</h3><p>  在进行有符号数运算的时候，如超过了机器所能表示的范围称为溢出。</p><p>  比如：add al,3，那么对于 8 位的有符号数据，机器所能表示的范围就是 -128~127。</p><p>  如果运算结果超出了机器所能表达的范围，将产生溢出。</p><blockquote><p>这里所讲的溢出，只是对有符号数运算而言。（就像进位只是相对于无符号数而言！）</p></blockquote><p>  就上面的两个例子来说</p><pre><code class=language-x86asm>mov al,98
add al,99
</code></pre><p>  add 指令运算的结果是 (al)=0C5H，因为进行的是有符号数运算，所以 al 中存储的是有符号数，而 0C5H 是有符号数 -59 的补码。</p><p>  如果我们用 add 指令进行的是有符号数运算，则 98+99=-59 这样的结果让人无法接受。</p><p>  造成这种情况的原因，就是实际的结果 197，作为一个有符号数，在 8 位寄存器 al 中存放不下。</p><p>  由于在进行有符号数运算时，可能发生溢出而造成结果的错误。所以 CPU 需要对指令执行后是否产生溢出进行记录。因此有了 OF</p><blockquote><p>记住，一定要注意 CF 和 OF 的区别</p></blockquote><ol><li>CF 是对无符号数运算有意义的标志位</li><li>而 OF 是对有符号数运算有意义的标志位</li></ol><p>  对于无符号数运算，CPU 用 CF 位来记录是否产生了进位；</p><p>  对于有符号数运算，CPU 用 OF 位来记录是否产生了溢出，</p><p>  当然，还要用 SF 位来记录结果的符号。</p><blockquote><p>对于有无符号，计算机是分不清楚状况的，因此他必须<strong>两种都记载着</strong>，要怎么用，看的是你当他是什么！</p></blockquote><p>  例如</p><pre><code class=language-x86asm>mov al,98d
add al,99d
</code></pre><p>  对于无符号数运算，98+99 没有进位，CF=0；</p><p>  对于有符号数运算，98+99 发生溢出，OF=1。</p><h3 id=116-adc-指令>11.6 adc 指令</h3><p>adc 是带进位加法指令，它利用了 CF 位上记录的进位值。</p><ol><li>格式：adc 操作对象 1,操作对象 2</li><li>功能：操作对象 1=操作对象 1+操作对象 2+CF</li><li>比如：adc ax,bx 实现的功能是：(ax)=(ax)+(bx)+CF</li></ol><p>adc 指令示例</p><pre><code class=language-x86asm>mov ax,2
mov bx,1
sub bx,ax
adc ax,1     # 执行后，(ax)=4
adc 执行时，相当于计算：(ax)+1+CF=2+1+1=4

mov ax,1
add ax,ax
adc ax,3     # 执行后，(ax)=5
adc 执行时，相当于计算：(ax)+3+CF=2+3+0=5

mov al,98H
add al,al
adc al,3     # 执行后，(ax)=34H
adc 执行时，相当于计算：(ax)+3+CF=30H+3+1=34H
</code></pre><p>  下面的指令和 add ax,bx 具有相同的结果</p><pre><code class=language-x86asm>add al,bl
adc ah,bh
</code></pre><p>  看来 CPU 提供 adc 指令的目的，就是来进行加法的第二步运算的。</p><p>  adc 指令和 add 指令相配合就可以对更大的数据进行加法运算。</p></article><div class=my-4><a href=https://b.hui.ke/tags/%E6%A0%87%E5%BF%97%E5%AF%84%E5%AD%98%E5%99%A8/ class="inline-block bg-tertiary-bg text-sm rounded px-3 py-1 my-1 me-2 hover:text-eureka">#标志寄存器</a>
<a href=https://b.hui.ke/tags/flag/ class="inline-block bg-tertiary-bg text-sm rounded px-3 py-1 my-1 me-2 hover:text-eureka">#flag</a></div><div class=py-2><div class="my-8 flex flex-col items-center md:flex-row"><a href=https://b.hui.ke/authors/hui.ke/ class="md:me-4 text-primary-text h-24 w-24"><img src=https://b.hui.ke/bagua.webp class="bg-primary-bg w-full rounded-full" alt=Avatar></a><div class="mt-4 w-full md:mt-0 md:w-auto"><a href=https://b.hui.ke/authors/hui.ke/ class="mb-2 block border-b pb-1 text-lg font-bold"><h3>Hui.Ke</h3></a><span class="block pb-2">❤ Cyber Security | Safety is a priority.</span>
<a href=mailto:3199731997@qq.com class=me-2><i class="fas fa-envelope"></i></a>
<a href="https://wpa.qq.com/msgrd?v=3&uin=3199731997" class=me-2><i class="fab fa-qq"></i></a>
<a href=/images/aixinxianquan.webp class=me-2><i class="fab fa-weixin"></i></a></div></div></div><div class="-mx-2 mt-4 flex flex-col border-t px-2 pt-4 md:flex-row md:justify-between"><div><span class="text-primary-text block font-bold">Previous</span>
<a href=https://b.hui.ke/docs/assembly-language/17/ class=block>11.7 ~ 11.9</a></div><div class="mt-4 md:mt-0 md:text-right"><span class="text-primary-text block font-bold">Next</span>
<a href=https://b.hui.ke/docs/assembly-language/15/ class=block>10.8 ~ 10.12</a></div></div><div id=valine-comments class=mt-4></div><script defer src=https://cdn.jsdelivr.net/npm/valine@1.4.16/dist/Valine.min.js integrity=sha384-e0+DNUCJo75aOAzHQbFWYBCM9/S4f0BhRJXvEgbE3mMS85RM20MSSGStHuNdY2QK crossorigin></script>
<script>document.addEventListener("DOMContentLoaded",function(){new Valine({el:"#valine-comments",appId:"BQnVqWIiq78AdqwyhvBVAa3y-MdYXbMMI",appKey:"RKg5By312YjM8rU6WkkfK9IN",recordIP:"true",serverURLs:"https://l.hui.ke",visitor:"true"})})</script></div><div class="hidden lg:block lg:w-1/4"><div class="bg-secondary-bg
prose sticky top-16 z-10 hidden px-6 py-4 lg:block"><h3>On This Page</h3></div><div class="sticky-toc
border-s
hidden px-6 pb-6 lg:block"><nav id=TableOfContents><ul><li><a href=#第十一章-标志寄存器>第十一章 标志寄存器</a><ul><li><a href=#111-zf-标志>11.1 ZF 标志</a></li><li><a href=#112-pf-标志>11.2 PF 标志</a></li><li><a href=#有符号数与补码>有符号数与补码</a></li><li><a href=#113-sf-标志>11.3 SF 标志</a></li><li><a href=#114-cf-标志>11.4 CF 标志</a></li><li><a href=#115-of-标志>11.5 OF 标志</a></li><li><a href=#116-adc-指令>11.6 adc 指令</a></li></ul></li></ul></nav></div><script>window.addEventListener("DOMContentLoaded",()=>{enableStickyToc()})</script></div></div></div></div></div><script>document.addEventListener("DOMContentLoaded",()=>{hljs.highlightAll(),changeSidebarHeight(),switchDocToc()})</script></div></div></main><footer class=pl-scrollbar><div class="mx-auto w-full max-w-screen-xl"><div class="text-center p-6 pin-b"><script async src=/js/click.js></script><div id=poem_ip></div><script type=text/javascript>jinrishici.load(function(e){tags.innerHTML=e.data.matchTags})</script><div><span id=timeDate>载入年天数...</span><span id=times>载入时分秒...</span>
<script async src=/js/duration.js></script></div><a href=https://www.foreverblog.cn/go.html target=_blank><img src=https://img.foreverblog.cn/wormhole_4_tp.gif alt style=display:inline-block;width:auto;height:32px title=穿梭虫洞-随机访问十年之约友链博客></a><p class="text-sm text-tertiary-text"><script async src=//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js></script>本站总访问量 <span id=busuanzi_value_site_pv></span> 次
&#183; 您是本站的第 <span id=busuanzi_value_site_uv></span> 个小伙伴</p><script async src=/js/tab.js></script></div></div></footer></body></html>